package Serveur;
import java.io.IOException;
import java.net.Socket;
import java.util.Vector;

public class TraitementClient  {
	
	private Client client;
	private Serveur serveur;
	private Utilisateur utilisateur;
	private EnvoitDonnee envoit;
	private ReceptionDonnee reception;
	private int numClient=0;
	private boolean etatConnexion;

	
	
	public TraitementClient(Serveur serveur,Client client, Socket socketClient){
		this.serveur=serveur;
		this.client=client;
		this.reception = new ReceptionDonnee(this,socketClient);
		this.envoit = new EnvoitDonnee(this,socketClient);
	}
	
	public void suivreProtocole() throws IOException{
		switch (this.reception.lireEntier()) {
		case 1: {
			this.identification();
			break;
		}
		case 2: {
			this.inscription();
			break;
		}
		case 3: {
			this.envoitMessage();
			break;
		}
		case 4: {
			this.retournerListeConnectes();
			break;
		}
		default:
			break;
		}
	}
	
	private void identification() {
		String id = this.reception.lireChaine();
		String mdp = this.reception.lireChaine();
		System.out.println("Identification");
		Utilisateur utilisateur =this.serveur.unUtilisateur(id);
		if (utilisateur!=null && utilisateur.getMdp().equals(mdp)){
			this.envoit.ecrireEntier(0);//ok
			this.utilisateur=utilisateur;
			this.utilisateur.lierTraitementClient(this);
			this.utilisateur.setEtatConnexion(true);
		}
		else this.envoit.ecrireEntier(-2);//erreur identifiant
	}
	
	private void inscription(){
		String id = this.reception.lireChaine();
		String mdp = this.reception.lireChaine();
		System.out.println("Inscription");
		if (this.serveur.unUtilisateur(id)==null){
			this.serveur.nouvelUtilisateur(id, mdp);
			this.envoit.ecrireEntier(0);//ok
		}
		else this.envoit.ecrireEntier(-3);//login déjà existant
	}
	
	private void envoitMessage(){
		String id = this.reception.lireChaine();
		String message = this.reception.lireChaine();
		Utilisateur utilisateur = this.serveur.unUtilisateur(id);
		if (this.serveur.unUtilisateur(id)!=null){
			utilisateur.envoitMessage(message,this.utilisateur.getid());
		}
	}
	
	private void retournerListeConnectes(){
        this.envoit.ecrireEntier(3);
		Vector<String> liste =this.serveur.retournerListe();
		this.envoit.ecrireEntier(liste.size());
		for (int i = 0; i < liste.size(); i++) // parcours de la table des connectés
	    {
			this.envoit.ecrireChaine(liste.elementAt(i));
	    }
	}
	public void deconnexion(){
		if(this.utilisateur!=null) this.utilisateur.setEtatConnexion(false);
	}
	
	public void transmettreMessage(String message, String id){
        this.envoit.ecrireEntier(4);
        this.envoit.ecrireChaine(id);
		this.envoit.ecrireChaine(message);
	}
	
}
